Romlige forskjeller i næringsstruktur, virkninger av eksogene sjokk i basissysselsettingen, og lokale forskjeller I sysselsettingsvekst.

I denne oppgaven vil vi se på næringsstrukturer på Haugalandet, Sunnhordland og Hardanger.

Problemstillinger og beregninger vi vil se nærmere på

Oversikt over befolkningene i regionene

Haugalandet

Haugalandet består av kommunene Bokn (852), Haugesund (37357), Karmøy (42186), Sauda (4595), Tysvær(11065), Utsira(198) og Vindafjord(8714). tilsammen bor det 104967 personer i denne regionen. i tidsperioden vi har hentet inn data har det vert kommunesammenslåing i denne regionen. Da ble Ølen og vindafjord slått i sammen til en kommune (hvordan har vi tatt hensyn til dette???)

Sunnhordland og Ullensvang

Sunnhordland og Ullensvang består av kommunene Bømlo(11957), Etne(4062), Fitjar(3189), Kvinnherad(13071), Stord(18759), Sveio(5766), Tysnes(2869) og Ullensvang(11048). Tilsammen bor det 70721 personer i denne regionen.

Tallene er hentet fra SSB 09.01.21 (https://www.ssb.no/statbank/table/01223/tableViewLayout1/) gjelder for 4 kvartal 2020.

1 Sysselsetting I Ulike Næringer, Etter Arbeidssted

Haugalandet

Første regionen vi velger å se på er Haugalandet. Her ønsker vi å se på utviklingen fra 2008 til 2020, av antall ansatte i sin helhet i regionen, samt de 6 mest relevante næringene.

I 2020 er det i underkant av 50 000 ansatte i alle næringer på Haugalandet. Av Fig. 1 ser vi at Haugalandet fikk en nedgang i antall ansatte i 2015 og 2016. I 2017 og 2018 ble det vekst, frem til det snudde i 2019 igjen.

I Fig. 2 ser vi at flere av kommunene på Haugalandet har hatt liten arbeidsplassvekst, med unntak av Tysvær, Vindafjord og Karmøy i den siste tiårsperioden. Vi ser dette mer tydelig på fig. 3 og 4.

Figur 3 og 4 viser utviklingen av det totale antall ansatte i alle næringer på kommunalt nivå, innenfor Haugaland-regionen.

I disse figurene, så ser vi tydelig at Haugesund har hatt reduksjon i antall ansatte totalt sett, mens Karmøy, Vindafjord og Tysvær har hatt en markant vekst de siste ti årene. Siden Haugesund har flest arbeidsplasser betyr utviklingen i Haugesund mye for de samlede tallene.

Warning: Removed 1 row(s) containing missing values (geom_path).

Warning: Removed 1 row(s) containing missing values (geom_path).

Figur 5 og 6 viser utviklingen av de 6 mest relevante næringene i Haugalandsregionen på kommune nivå.

Vi ser i de tre største kommunene, Haugesund, Karmøy og Vindafjord utgjør næringene Helse- og Sosialtjenester og Industri de største. Helse- og Sosialtjenester har vokst jevnt og trutt de siste tiårene, mens antall ansatte i industrinæringen har variert fra kommune til kommune. I Haugalandet utgjør primærnæringer (jordbruk, Skogbrug og Fiske) en større andel, enn hos Karmøy og Haugesund hvor primærnæringene kun utgjøre en liten andel.

Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.

Det er relativt store kommunevise forskjeller i næringsstrukturen. Rogaland har en forholdsvis ensidig næringsstruktur, olje og gass er dominerende. Fylket er suverent dominerende for fossil energi. De har for øvrig de siste årene satset på et en mer differensiert næringsstruktur og næringsliv ved å satse på helse, IKT og fornybar energi.

I våre modeller, er satsingen på helse den mest tydelige. Av rent tekniske grunner er det vanskelig å se utviklingen i enkelte næringer som utgjør små andeler, på grunn av skalaen som er benyttet. Til tross for dette, kan man se at næringsstrukturen i regionen samlet generelt sett har endret seg lite.

Rogaland har gode jordbruksmuligheter, men i Fig. 2: Haugalandet ser vi en nedgang i sysselsettingen de siste tiårene, mens det er en marginal økning i Sunnhordaland, jf. Fig 9. I Fig. 12: ser vi at Tysnes har hatt en markant økning i primærnæringen, relativt sett.

Universitets- og høgskolesektoren er liten i Rogaland, og den består for det første av Universitetet i Stavanger (UiS) og Høgskulen på Vestlandet (HVL) med campus Haugesund.

Haugaland Vekst, som er eigd/drevet av Haugalandsregionen er i spissen på å legge til rette for å etablere ny industri samt andre arbeidsplasser i regionen.

I helsesektoren er Stavanger universitetssykehus (SuS) sentralt.

Sunnhordland

Videre ønsker vi å se på den samme utviklingen, men denne gangen i Sunnhordlandsregionen.

Her viser figur 7 utviklingen til den totale summen av ansatte i Sunnhordlandsregionen fra 2008 til 2020. Sunnhordaland har i 2020 i underkant av 25 500 ansatte. Vi ser ut ifrå figuren at Sunnhordlandsregionen hadde ein markant vekst ifrå 2008 til 2014 med periodar med svak nedgang. Fra 2014 har det vært en reduksjon i totalt antall ansatte.

Figur 8 viser utviklingen av totalt ansatte i Sunnhordlandsregionen på kommunenivå i hele regionen fra 2008 til 2020. Denne figuren gir oss en oversikt, men er ikke heilt brukervennelig. Vi lager dermed en mer oversiktlig figur, jf. figur 9 & 10.

Vi ser her ut ifra figur 9 og 10 utviklingen for hver enkelt kommune i Sunnhordland totalt sett, og her ser vi mye tydligere utviklingen fra 2008 til 2020. En kan se her at Kvinnherad, Etne og Fitjar har hatt en reduksjon i totalt ansatte, mens Tysnes og Sveio har hatt ein kraftig vekst. En interessant bemerking er Stord i 2014 og Kvinnherad fra 2008 til 2017.

For å få et bedre oversikt over utviklingen i kommunen ønsker vi å se på de 6 mest relevante næringene i hver kommune.

Warning: Removed 1 row(s) containing missing values (geom_path).

Figur 11 og 12 viser de 6 mest relevante næringene i hver enkelt kommune i Sunnhordlandsregionen fra 2008 til 2020.

En ser ut ifra figur 11 at i de tre største kommunene, Bømlo, Kvinnherad og Stord så har de alle hatt en reduksjon i industrien, samtidig som de har hatt en vekst i helse- og sosialtjenester. Tysnes har vært stabil når det kommer til industri, men har sett ein markant vekst i primærnæringen (Jordbruk, Skogbruk og Fiske).

Sysselsettingsutviklingen for ulike næringer i ulike kommuner og for regionen samlet.

Det første bemerkelsesverdige i Sunnhordlandsregionen er den markante reduksjonen i industri i Stord kommune i 2014, samt Kvinnherad fra 2008. Dette stemmer overens med to hendelser. Den første er oljeknekken i 2014 som medførte at bl.a. Aker Stord AS som er avhengig av Olje-industrien måtte permitere.

Stord er en kommune som har mye offshore industri. I 2008/2009 så stengte Sør-Norge Aluminium “B-Hallen” som medførte 50% reduksjon i produksjon, og dermed ansatte. Interessant å bemerke at i Kvinnherad så er antall industriarbeidere redusert samtidig som antall ansatte i Helse- og Sosialetjenester økt. Bømlo har også sett en stabil reduksjon i ansatte innen industri, samt vekst i Helse- og Sosialetjenester frem til 2018.

Ser en på hele Sunnhordlandsregionen i sin helhet, så ser vi en svært tydelig vekst innen Helse- og Sosialetjenester, og reduksjon innen industri i hele regionen. Kvinnherad, Tysnes og Fitjar har opplevd ein markant vekst innen primærnæring. Kan det vere ein grunn til dette som burde diskuterast??

Fortsett Her (OA, KH)

Hardanger

Til slutt må vi gjere det samme med Hardanger

I henhold til oppgavens krav til betrakter vi Hardanger før 2019 som Ullensvang- og Odda kommune som to separerte kommuner. i 2020 så ble Ullensvang, Odda og Jondal slått sammen til Ullensvang. Dette forklarer den voldsomme økningen i sysselsetting i regionen ved tidspunktet for kommunesammenslåing.

Warning: Removed 1 row(s) containing missing values (geom_path).

3 Sysselsetting I Ulike Næringer, Etter Bosted (Modeller Under Arbeid)

Haugalandet

Sunnhordland

Hardanger

Oppgave 4

Pendling er et viktig begrep å bruke når vi snakker om regional utvikling. De ulike kommunene eller regionene kan ha ulike behov. De aller fleste kommuner har for lite arbeidsplasser i forhold til antall arbeidene. Det vil si at de fleste plasser er de avhengige av å pendle til andre plasser. Det kan være andre kommuner i samme region eller andre regioner. Det finnes også begrepet netto innpendling som betyr at noen kommuner eller regioner har flere arbeidsplasser tilgjengelige enn de har folk til å jobbe der innad i kommunen. Vi skal se på innpendling og utpendling som vil kunne fortelle oss i hvilken grad et sted er integrert i et større arbeidsmarked https://regionalanalyse.no/rapport/3004/1/4.

Vi har laget en tabell som tar for seg regionen Haugalandet. Her kan vi skille de forskjellige kommunene og se hvor andelen av innpendling og utpendling er størst eller minst.

Vi kan se på Karmøy som et eksempel når det gjelder innpendling og utpendling. I Karmøy kommune er det 11637 stykk som jobber i egen kommune, mens 5888 pendler til andre kommuner i regionen. Herav pendler 4916 personer til Haugesund, 9 pendler til Sauda, 31 pendler til Bokn, 712 til Tysvær, 218 til Vindafjord og 2 personer pendler til Utsira. Når det kommer til innpendling kan vi se at det til sammen er 3384 som pendler til Karmøy fra Hauglandsregionen. Den største andelen fra samme region som pendler til Karmøy er Haugesund. Vi kan se fra tabellen at det er 2586 stykker som pendler fra Haugesund til Karmøy.

På Utsira som har en mindre befolkning ser vi at 85 jobber i hjemkommunen, mens 9 stk pendler til andre kommune i regionen, henholdsvis til Haugesund, Tysvær og Karmøy.

På Haugalandet kan vi se

Bokommune k_1106 k_1135 k_1145 k_1146 k_1149 k_1151 k_1160
Haugesund_1106 11714 11 22 1029 2586 3 264
Sauda_1135 31 1789 0 2 6 0 27
Bokn_1145 50 0 223 41 41 0 16
Tysvær_1146 1540 1 33 2270 645 0 267
Karmøy_1149 4916 9 31 712 11637 2 218
Utsira_1151 4 0 0 2 3 85 0
Vindafjord_1160 306 10 1 238 103 0 3231

I Sunnhordaland ser det slik ut pr 2020

Bokommune k_4611 k_4612 k_4613 k_4614 k_4615 k_4616 k_4617 k_4618
Etne_4611 1306 1 0 11 0 4 28 22
Sveio_4612 6 1055 27 137 2 6 1 1
Bømlo_4613 1 35 4277 623 25 7 8 3
Stord_4614 11 52 280 7314 169 32 33 9
Fitjar_4615 0 8 20 472 819 5 2 0
Tysnes_4616 1 3 4 66 5 948 24 1
Kvinnherad_4617 32 0 24 178 4 36 5270 83
Ullensvang_4618 10 0 1 7 1 1 53 4711
LS0tCnRpdGxlOiAiQXJiZWlkc2tyYXYgdsOlcmVuIDIwMjIiCmF1dGhvcjoKLSBLZXZpbiBIYQotIE9sYSBBbmRyZSBPbG9mc3NvbgotIEFubiBFbGlzYWJldGggSmFjb2JzZW4KLSBIZWlkaSBNYXJpZSBSb2xmc25lcwotIERhbmllbCBLYXJzdGFkCi0gSGVucmlldHRlIEhhbnNlbgotIFN1c2FubiBCaXJrZWxhbmQgU2l2ZXJ0c2VuCi0gVmlsZGUgSGF1Z2xhbmQKc3VidGl0bGU6IE1TQjEwNiwgQW52ZW5kdCBieS0gb2cgcmVnaW9uYWzDuGtvbm9taQpvdXRwdXQ6CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKbGFuZzogbm8tTkIKZWRpdG9yX29wdGlvbnM6IAogIG1hcmtkb3duOiAKICAgIHdyYXA6IHNlbnRlbmNlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyh7CiAgbGlicmFyeShyZWFkcikKICBsaWJyYXJ5KGdncGxvdDIpCiAgbGlicmFyeShrbml0cikKICBsaWJyYXJ5KHZpcmlkaXMpCiAgbGlicmFyeSh0aWR5dmVyc2UpCiAgfSkKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89RkFMU0UsIGluY2x1ZGUgPSBUUlVFKQpgYGAKCiMgUm9tbGlnZSBmb3Jza2plbGxlciBpIG7DpnJpbmdzc3RydWt0dXIsIHZpcmtuaW5nZXIgYXYgZWtzb2dlbmUgc2pva2sgaSBiYXNpc3N5c3NlbHNldHRpbmdlbiwgb2cgbG9rYWxlIGZvcnNramVsbGVyIEkgc3lzc2Vsc2V0dGluZ3N2ZWtzdC4KCkkgZGVubmUgb3BwZ2F2ZW4gdmlsIHZpIHNlIHDDpSBuw6ZyaW5nc3N0cnVrdHVyZXIgcMOlIEhhdWdhbGFuZGV0LCBTdW5uaG9yZGxhbmQgb2cgSGFyZGFuZ2VyLgoKUHJvYmxlbXN0aWxsaW5nZXIgb2cgYmVyZWduaW5nZXIgdmkgdmlsIHNlIG7DpnJtZXJlIHDDpQoKLSAgIEJlc2tyaXZlIHNpdHVhc2pvbmVuIHNsaWsgZGVuIGVyIGZvciAyMDIwLCBvZyBmb3IgdXR2aWtsaW5nZW4gb3ZlciB0aWQuCi0gICBTeXNzZWxzZXR0aW5nc3V0dmlrbGluZ2VuIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciBvZyBmb3IgcmVnaW9uZW4gc2FtbGV0LgotICAgQW5kZWxlbiBhdiBzeXNzZWxzZXR0aW5nZW4gaW5uZW5mb3IgZW5rZWx0bsOmcmluZ2VyLCBvZyBzYW1tZW5saWduZSBzaXR1YXNqb25lbiBvZyB1dHZpa2xpbmdlbiBmb3IgbG9rYWxlIGtvbW11bmVyIG9nIGxva2FsIHJlZ2lvbiBtZWQgZGV0IHNvbSBnamVsZGVyIGZvciBuYXNqb25lbiBzYW1sZXQuCi0gICBCZXJlZ25lIGxva2FsaXNlcmluZ3Nrdm90aWVudGVyIGZvciB1bGlrZSBuw6ZyaW5nZXIgaSB1bGlrZSBrb21tdW5lciwgb2cgZm9yIHJlZ2lvbmVuKGUpIHNhbWxldC4KLSAgIEJlcmVnbmUgdWxpa2UgYWdncmVnZXJpbmdzbml2w6VlciBhdiBuw6ZyaW5nZXIgb2cgZ2VvZ3JhZmksIGlkZW50aWZpc2VyIG11bGlnZSBrbHluZ2VyIGJhc2VydCBww6UgdmVyZGllbmUgZm9yIGxva2FsaXNlcmluZ3Nrdm90aWVudGVuZS4KLSAgIEdqw7hyZSBlbiB2dXJkZXJpbmcgYXYgaHZvciBrb25zZW50cmVydC9zcHJlZHQgZW4gbsOmcmluZyBlciBmb3JkZWx0IG1lbGxvbSBrb21tdW5lbmUgaSByZWdpb25lbiwgYmFzZXJ0IHDDpSBiZXJlZ25pbmdlciBhdiBkZW4gcm9tbGlnZSBHaW5pLWluZGVrc2VuLgotICAgVnVyZGVyZSBvbSBzYW1tZW5saWduaW5nc2dydW5ubGFnZXQgYsO4ciB2w6ZyZSBzYW1sZXQgc3lzc2Vsc2V0dGluZyBpIHJlZ2lvbmVuLCBlbGxlciBzYW1sZXQgc3lzc2Vsc2V0dGluZyBhdiBuYXNqb25lbiwgb2cgZmlubmUgdXQgaHZpbGtlbiByb2xsZSBkZXQgc3BpbGxlciBvbSBlbiBicnVrZXIgcmVnaW9uYWxlIGVsbGVyIG5hc2pvbmFsZSBhbnNsYWcgZm9yIHNhbWxldCBzeXNzZWxzZXR0aW5nLgotICAgRmlubmUgdXQgb20gbsOmcmluZ3NzdHJ1a3R1cmVuIGkgcmVnaW9uZW4gaGFyIGJsaXR0IG1lciBlbGxlciBtaW5kcmUgZGl2ZXJzaWZpc2VydCwgbWFuZ2ZvbGRpZywgb3ZlciB0aWQuCi0gICBCZXJlZ25lIGVuIHJlZ2lvbmFsIG1hbmdmb2xkLWluZGVrcyBvZyBmaW5uZSB1dCBodm9yZGFuIHZlcmRpZW5lIHDDpSBlbiBzbGlrIGluZGVrcyBlciBlbmRyZXQgb3ZlciB0aWQuCi0gICBWdXJkZXJlIG9tIHN5c3NlbHNldHRpbmdzYW5kZWxlbmUgc2thbCBzYW1tZW5saWduZXMgbWVkIG5hc2pvbmFsZSBlbGxlciByZWdpb25hbGUgYW5kZWxlciBmb3IgZGUgdWxpa2UgbsOmcmluZ2VuZQotICAgR2plbnRhIGJlcmVnbmluZ2VyIGZvciBhbmRlbGVyIGF2IGFyYmVpZHN0YWtlcmUgaSB1bGlrZSBuw6ZyaW5nZXIsIGxva2FsaXNlcmluZ3Nrdm90aWVudGVyLCBkZW4gcm9tbGlnZSBHaW5pLSBrb2VmZmlzaWVudGVuIG9nIG3DpWxldCBmb3IgbWFuZ2ZvbGQgYXYgbsOmcmluZ2VyLCBtZWQgdXRnYW5nc3B1bmt0IGkgZGF0YSBzcGVzaWZpc2VydCBldHRlciBhcmJlaWRzdGFrZXJuZXMgYm9zdGVkLgotICAgU2FtbWVubGlnbmUgcmVzdWx0YXRlbmUgZm9yIGRhdGEgZXR0ZXIgYXJiZWlkc3N0ZWQsIG9nIGtvbW1lbnRlciBodmlsa2VuIGluZm9ybWFzam9uIHJlc3VsdGF0ZW5lIGdpciBvbSByb21saWcgbW9iaWxpdGV0IGkgYXJiZWlkc21hcmtlZGV0LgotICAgR2kgZW4ga29ydCBvdmVyc2lrdCBvdmVyIHBlbmRsZXJzdHLDuG1tZXIgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuCi0gICBCZXJlZ25lIG9nIHByZXNlbnRlcmUgYW5kZWxlciBhdiBhcmJlaWRzdGFrZXJlIG1lZCBib3N0ZWQgaSBlbiBrb21tdW5lIHNvbSBoYXIgYXJiZWlkc3N0ZWQgaSBhbmRyZSBrb21tdW5lciwgb2cgZ2rDuHIgZGV0IHNhbW1lIGZvciBhbmRlbGVuIGF2IGpvYmJlbmUgaSBlbiBrb21tdW5lIHNvbSBlciBiZXNhdHQgYXYgYXJiZWlkc3Rha2VyZSBmcmEgYW5kcmUga29tbXVuZXIuCi0gICBEaXNrdXRlcmUgZm9yc2tqZWxsZXIgbWVsbG9tIGtvbW11bmVuZSBpIHJlZ2lvbmVuLCBvZyBkcsO4ZnQgdXR2aWtsaW5nZW4gb3ZlciB0aWQgZm9yIHVsaWtlIGtvbW11bmVyCi0gICBCZXJlZ25lIG9nIHByZXNlbnRlcmUgYW5kZWxlbiBhdiBhcmJlaWRzdGFrZXJlIHNvbSBib3Igb2cgam9iYmVyIGlubmVuZm9yIHNhbW1lIGtvbW11bmUuIFNlIG9tIGRldCBlciBzeXN0ZW1hdGlza2UgZm9yc2tqZWxsZXIgc2V0dCBpIGZvcmhvbGQgdGlsIHNlbnRyYWxpdGV0IG9nIHRpbGdqZW5nZWxpZ2hldCBpIGRldCBsb2thbGUgYXJiZWlkc21hcmtlZGV0LiBPZyBvbSBkZXQgZXIgYmVzdGVtdGUgdHJlbmRlciBpIHV0dmlrbGluZ2VuIGZvciB1bGlrZSBrb21tdW5lci4KLSAgIEJydWtlIGJlcmVnbmluZ2VuZSBhdiBsb2thbGlzZXJpbmdrdm90aWVudGVyIHRpbCDDpSBkZWxlIG7DpnJpbmdlbmUgaW5uIGkgbG9rYWwtIG9nIGJhc2lzbsOmcmluZ2VyCi0gICBGb3JtdWxlcmUgZW4gw7hrb25vbWlzayBiYXNlbW9kZWxsIG9nIGJlcmVnbmUgw7hrb25vbWlza2UgYmFzZW11bGlwbGlrYXRvcmVyIGZvciBlbmtlbHRrb21tdW5lciBvZyByZWdpb24oZXIpLgotICAgVnVyZGVyZSBsb2thbGUgdmlya25pbmdlciBhdiBhbHRlcm5hdGl2ZSBsb2thbGlzZXJpbmdlciBpIE9kZGEsIEh1c25lcyBvZyBMZWlydmlrCi0gICBEcsO4ZnRlIHZpcmtuaW5nZXIgYXYgZXQgc2xpa3QgcG9zaXRpdnQgZWtzb2dlbnQgc2pva2sgZm9yIGRlbiBsb2thbGUgw7hrb25vbWllbiBnamVubm9tIGJydWsgYXYgZW4gYmFzZW1vZGVsbAotICAgRmlubmUgdXQgaHZvcmRhbiB2aXJrbmluZ2VuZSBldmVudHVlbHQgc3ByZXMgdGlsIGFuZHJlIGtvbW11bmVyIGkgcmVnaW9uZW4gb2cgaHZvcmRhbiBlbiBrYW4gYnJ1a2UgZGF0YSBmb3IgcGVuZGxlc3Ryw7htbWVyIHRpbCDDpSBwcmVkaWtlcmUgdmlya25pbmdlciBww6Ugc3lzc2Vsc2V0dGluZ2VuIGkgdWxpa2Uga29tbXVuZXIuCi0gICBTYW1tZW5saWduZSBkaXNzZSBwcmVkaWtzam9uZW5lIG1lZCBkZSB2aSBmw6VyIG7DpXIgdmkgZ2plbm5vbWbDuHJlciBhbmFseXNlbiBww6UgcmVnaW9uYWx0IG5pdsOlLgotICAgR2kgZW4gc2hpZnQtc2hhcmUgYW5hbHlzZSBpIGVuIGRpc2t1c2pvbiBhdiBmb3Jza2plbGxlciBpIHZla3N0IGZvciBla3NlbXBlbCBtZWxsb20gaW5kcmUsIG1pZHRyZSBvZyB5dHJlIGRlbGVyIGF2IHJlZ2lvbmVuLCBlbGxlciBldmVudHVlbHQgb21yw6VkZXIva29tbXVuZXIgc29tIGhhciBoYXR0IHN0ZXJrIG9nIHN2YWsgYmVmb2xrbmluZ3N1dHZpa2xpbmcuCgojIyBPdmVyc2lrdCBvdmVyIGJlZm9sa25pbmdlbmUgaSByZWdpb25lbmUKCiMjIyBIYXVnYWxhbmRldAoKSGF1Z2FsYW5kZXQgYmVzdMOlciBhdiBrb21tdW5lbmUgQm9rbiAoODUyKSwgSGF1Z2VzdW5kICgzNzM1NyksIEthcm3DuHkgKDQyMTg2KSwgU2F1ZGEgKDQ1OTUpLCBUeXN2w6ZyKDExMDY1KSwgVXRzaXJhKDE5OCkgb2cgVmluZGFmam9yZCg4NzE0KS4KdGlsc2FtbWVuIGJvciBkZXQgMTA0OTY3IHBlcnNvbmVyIGkgZGVubmUgcmVnaW9uZW4uCmkgdGlkc3BlcmlvZGVuIHZpIGhhciBoZW50ZXQgaW5uIGRhdGEgaGFyIGRldCB2ZXJ0IGtvbW11bmVzYW1tZW5zbMOlaW5nIGkgZGVubmUgcmVnaW9uZW4uCkRhIGJsZSDDmGxlbiBvZyB2aW5kYWZqb3JkIHNsw6V0dCBpIHNhbW1lbiB0aWwgZW4ga29tbXVuZSAoaHZvcmRhbiBoYXIgdmkgdGF0dCBoZW5zeW4gdGlsIGRldHRlPz8/KQoKIyMjIFN1bm5ob3JkbGFuZCBvZyBVbGxlbnN2YW5nCgpTdW5uaG9yZGxhbmQgb2cgVWxsZW5zdmFuZyBiZXN0w6VyIGF2IGtvbW11bmVuZSBCw7htbG8oMTE5NTcpLCBFdG5lKDQwNjIpLCBGaXRqYXIoMzE4OSksIEt2aW5uaGVyYWQoMTMwNzEpLCBTdG9yZCgxODc1OSksIFN2ZWlvKDU3NjYpLCBUeXNuZXMoMjg2OSkgb2cgVWxsZW5zdmFuZygxMTA0OCkuClRpbHNhbW1lbiBib3IgZGV0IDcwNzIxIHBlcnNvbmVyIGkgZGVubmUgcmVnaW9uZW4uCgpUYWxsZW5lIGVyIGhlbnRldCBmcmEgU1NCIDA5LjAxLjIxICg8aHR0cHM6Ly93d3cuc3NiLm5vL3N0YXRiYW5rL3RhYmxlLzAxMjIzL3RhYmxlVmlld0xheW91dDEvPikgZ2plbGRlciBmb3IgNCBrdmFydGFsIDIwMjAuCgpgYGB7ciBjc3ZfZmlsZXJ9CnN5c3NlbF9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvc3lzc2VsX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpobGRfYXJiIDwtIHJlYWRfY3N2KCJEYXRhL2hsZF9hcmIuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKc3VuX2FyYiA8LSByZWFkX2NzdigiRGF0YS9zdW5fYXJiLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmhhcl9hcmIgPC0gcmVhZF9jc3YoIkRhdGEvaGFyX2FyYi5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzeXNzZWxfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL3N5c3NlbF9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGxkX2JvcyA8LSByZWFkX2NzdigiRGF0YS9obGRfYm9zLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCnN1bl9ib3MgPC0gcmVhZF9jc3YoIkRhdGEvc3VuX2Jvcy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpoYXJfYm9zIDwtIHJlYWRfY3N2KCJEYXRhL2hhcl9ib3MuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvUGVuZGxpbmcuY3N2Iiwgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKaGdsX1BlbmRsaW5nIDwtIHJlYWRfY3N2KCJEYXRhL2hnbF9QZW5kbGluZy5jc3YiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpzdW5fUGVuZGxpbmcgPC0gcmVhZF9jc3YoIkRhdGEvc3VuX1BlbmRsaW5nLmNzdiIsIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCmBgYAoKIyAxIFN5c3NlbHNldHRpbmcgSSBVbGlrZSBOw6ZyaW5nZXIsIEV0dGVyIEFyYmVpZHNzdGVkCgojIyBIYXVnYWxhbmRldAoKRsO4cnN0ZSByZWdpb25lbiB2aSB2ZWxnZXIgw6Ugc2UgcMOlIGVyIEhhdWdhbGFuZGV0LgpIZXIgw7huc2tlciB2aSDDpSBzZSBww6UgdXR2aWtsaW5nZW4gZnJhIDIwMDggdGlsIDIwMjAsIGF2IGFudGFsbCBhbnNhdHRlIGkgc2luIGhlbGhldCBpIHJlZ2lvbmVuLCBzYW10IGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZS4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhdWdhbGFuZGV0XzF9CmhsZF9hcmIgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSDDhXIsIHkgPSBUb3RhbHQpKSArCiAgZ2VvbV9saW5lKCkgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxOiBIYXVnYWxhbmRldCIpKwogIHlsYWIoIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCkkgMjAyMCBlciBkZXQgaSB1bmRlcmthbnQgYXYgNTAgMDAwIGFuc2F0dGUgaSBhbGxlIG7DpnJpbmdlciBww6UgSGF1Z2FsYW5kZXQuCkF2IEZpZy4KMSBzZXIgdmkgYXQgSGF1Z2FsYW5kZXQgZmlrayBlbiBuZWRnYW5nIGkgYW50YWxsIGFuc2F0dGUgaSAyMDE1IG9nIDIwMTYuCkkgMjAxNyBvZyAyMDE4IGJsZSBkZXQgdmVrc3QsIGZyZW0gdGlsIGRldCBzbnVkZGUgaSAyMDE5IGlnamVuLgoKYGBge3IgQXJiZWlkc3N0ZWRfSGF1Z2FsYW5kZXRfMn0Kc3lzc2VsX2FyYiAlPiUgCiAgZmlsdGVyKGtuciAlaW4lIGMoMTEwNiwgMTEzNSwgMTE0NSwgMTE0NiwgMTE0OSwgMTE1MSwgMTE2MCkpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gYEFsbGUgTsOmcmluZ2VyYCwgKGFuZ2xlPTApKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIGxhYnModGl0bGUgPSAiRmlnLiAyOiBIYXVnYWxhbmRldCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkkgRmlnLgoyIHNlciB2aSBhdCBmbGVyZSBhdiBrb21tdW5lbmUgcMOlIEhhdWdhbGFuZGV0IGhhciBoYXR0IGxpdGVuIGFyYmVpZHNwbGFzc3Zla3N0LCBtZWQgdW5udGFrIGF2IFR5c3bDpnIsIFZpbmRhZmpvcmQgb2cgS2FybcO4eSBpIGRlbiBzaXN0ZSB0acOlcnNwZXJpb2Rlbi4KVmkgc2VyIGRldHRlIG1lciB0eWRlbGlnIHDDpSBmaWcuCjMgb2cgNC4KCmBgYHtyIGhsZF9hcmJfbG9uZ30KaGxkX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhdWdhbGFuZGV0XzNfU3TDuHJzdGVfQXJiZWlkc3RlZH0KaGxkX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJIYXVnZXN1bmQiLCAiS2FybcO4eSIsICJWaW5kYWZqb3JkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDM6IEhhdWdhbGFuZGV0OiBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfNF9NaW5zdGVfQXJiZWlkc3RlZH0KaGxkX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCb2tuIiwgIlNhdWRhIiwgIlR5c3bDpnIiLCAiVXRzaXJhIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDQ6IEhhdWdhbGFuZGV0OiBCb2tuLCBTYXVkYSBUeXN2w6ZyIG9nIFV0c2lyYSIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCkZpZ3VyIDMgb2cgNCB2aXNlciB1dHZpa2xpbmdlbiBhdiBkZXQgdG90YWxlIGFudGFsbCBhbnNhdHRlIGkgYWxsZSBuw6ZyaW5nZXIgcMOlIGtvbW11bmFsdCBuaXbDpSwgaW5uZW5mb3IgSGF1Z2FsYW5kLXJlZ2lvbmVuLgoKSSBkaXNzZSBmaWd1cmVuZSwgc8OlIHNlciB2aSB0eWRlbGlnIGF0IEhhdWdlc3VuZCBoYXIgaGF0dCByZWR1a3Nqb24gaSBhbnRhbGwgYW5zYXR0ZSB0b3RhbHQgc2V0dCwgbWVucyBLYXJtw7h5LCBWaW5kYWZqb3JkIG9nIFR5c3bDpnIgaGFyIGhhdHQgZW4gbWFya2FudCB2ZWtzdCBkZSBzaXN0ZSB0aSDDpXJlbmUuClNpZGVuIEhhdWdlc3VuZCBoYXIgZmxlc3QgYXJiZWlkc3BsYXNzZXIgYmV0eXIgdXR2aWtsaW5nZW4gaSBIYXVnZXN1bmQgbXllIGZvciBkZSBzYW1sZWRlIHRhbGxlbmUuCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfM19TdMO4cnN0ZV9BcmJlaWRzc3RlZH0KaGxkX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJIYXVnZXN1bmQiLCAiS2FybcO4eSIsICJWaW5kYWZqb3JkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gNTogSGF1Z2FsYW5kZXQ6IEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19IYXVnZWxhbmRldF80X01pbnN0ZV9BcmJlaWRzc3RlZH0KaGxkX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJCb2tuIiwgIlNhdWRhIiwgIlR5c3bDpnIiLCAiVXRzaXJhIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gNjogSGF1Z2FsYW5kZXQ6IEJva24sIFNhdWRhLCBUeXN2w6ZyIG9nIFV0c2lyYSIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpGaWd1ciA1IG9nIDYgdmlzZXIgdXR2aWtsaW5nZW4gYXYgZGUgNiBtZXN0IHJlbGV2YW50ZSBuw6ZyaW5nZW5lIGkgSGF1Z2FsYW5kc3JlZ2lvbmVuIHDDpSBrb21tdW5lIG5pdsOlLgoKVmkgc2VyIGkgZGUgdHJlIHN0w7hyc3RlIGtvbW11bmVuZSwgSGF1Z2VzdW5kLCBLYXJtw7h5IG9nIFZpbmRhZmpvcmQgdXRnasO4ciBuw6ZyaW5nZW5lIEhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIgb2cgSW5kdXN0cmkgZGUgc3TDuHJzdGUuCkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIgaGFyIHZva3N0IGpldm50IG9nIHRydXR0IGRlIHNpc3RlIHRpw6VyZW5lLCBtZW5zIGFudGFsbCBhbnNhdHRlIGkgaW5kdXN0cmluw6ZyaW5nZW4gaGFyIHZhcmllcnQgZnJhIGtvbW11bmUgdGlsIGtvbW11bmUuCkkgSGF1Z2FsYW5kZXQgdXRnasO4ciBwcmltw6ZybsOmcmluZ2VyIChqb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UpIGVuIHN0w7hycmUgYW5kZWwsIGVubiBob3MgS2FybcO4eSBvZyBIYXVnZXN1bmQgaHZvciBwcmltw6ZybsOmcmluZ2VuZSBrdW4gdXRnasO4cmUgZW4gbGl0ZW4gYW5kZWwuCgojIyMgU3lzc2Vsc2V0dGluZ3N1dHZpa2xpbmdlbiBmb3IgdWxpa2UgbsOmcmluZ2VyIGkgdWxpa2Uga29tbXVuZXIgb2cgZm9yIHJlZ2lvbmVuIHNhbWxldC4KCkRldCBlciByZWxhdGl2dCBzdG9yZSBrb21tdW5ldmlzZSBmb3Jza2plbGxlciBpIG7DpnJpbmdzc3RydWt0dXJlbi4KUm9nYWxhbmQgaGFyIGVuIGZvcmhvbGRzdmlzIGVuc2lkaWcgbsOmcmluZ3NzdHJ1a3R1ciwgb2xqZSBvZyBnYXNzIGVyIGRvbWluZXJlbmRlLgpGeWxrZXQgZXIgc3V2ZXJlbnQgZG9taW5lcmVuZGUgZm9yIGZvc3NpbCBlbmVyZ2kuCkRlIGhhciBmb3Igw7h2cmlnIGRlIHNpc3RlIMOlcmVuZSBzYXRzZXQgcMOlIGV0IGVuIG1lciBkaWZmZXJlbnNpZXJ0IG7DpnJpbmdzc3RydWt0dXIgb2cgbsOmcmluZ3NsaXYgdmVkIMOlIHNhdHNlIHDDpSBoZWxzZSwgSUtUIG9nIGZvcm55YmFyIGVuZXJnaS4KCkkgdsOlcmUgbW9kZWxsZXIsIGVyIHNhdHNpbmdlbiBww6UgaGVsc2UgZGVuIG1lc3QgdHlkZWxpZ2UuCkF2IHJlbnQgdGVrbmlza2UgZ3J1bm5lciBlciBkZXQgdmFuc2tlbGlnIMOlIHNlIHV0dmlrbGluZ2VuIGkgZW5rZWx0ZSBuw6ZyaW5nZXIgc29tIHV0Z2rDuHIgc23DpSBhbmRlbGVyLCBww6UgZ3J1bm4gYXYgc2thbGFlbiBzb20gZXIgYmVueXR0ZXQuClRpbCB0cm9zcyBmb3IgZGV0dGUsIGthbiBtYW4gc2UgYXQgbsOmcmluZ3NzdHJ1a3R1cmVuIGkgcmVnaW9uZW4gc2FtbGV0IGdlbmVyZWx0IHNldHQgaGFyIGVuZHJldCBzZWcgbGl0ZS4KClJvZ2FsYW5kIGhhciBnb2RlIGpvcmRicnVrc211bGlnaGV0ZXIsIG1lbiBpIEZpZy4KMjogSGF1Z2FsYW5kZXQgc2VyIHZpIGVuIG5lZGdhbmcgaSBzeXNzZWxzZXR0aW5nZW4gZGUgc2lzdGUgdGnDpXJlbmUsIG1lbnMgZGV0IGVyIGVuIG1hcmdpbmFsIMO4a25pbmcgaSBTdW5uaG9yZGFsYW5kLCBqZi4KRmlnIDkuCkkgRmlnLgoxMjogc2VyIHZpIGF0IFR5c25lcyBoYXIgaGF0dCBlbiBtYXJrYW50IMO4a25pbmcgaSBwcmltw6ZybsOmcmluZ2VuLCByZWxhdGl2dCBzZXR0LgoKVW5pdmVyc2l0ZXRzLSBvZyBow7hnc2tvbGVzZWt0b3JlbiBlciBsaXRlbiBpIFJvZ2FsYW5kLCBvZyBkZW4gYmVzdMOlciBmb3IgZGV0IGbDuHJzdGUgYXYgVW5pdmVyc2l0ZXRldCBpIFN0YXZhbmdlciAoVWlTKSBvZyBIw7hnc2t1bGVuIHDDpSBWZXN0bGFuZGV0IChIVkwpIG1lZCBjYW1wdXMgSGF1Z2VzdW5kLgoKSGF1Z2FsYW5kIFZla3N0LCBzb20gZXIgZWlnZC9kcmV2ZXQgYXYgSGF1Z2FsYW5kc3JlZ2lvbmVuIGVyIGkgc3Bpc3NlbiBww6Ugw6UgbGVnZ2UgdGlsIHJldHRlIGZvciDDpSBldGFibGVyZSBueSBpbmR1c3RyaSBzYW10IGFuZHJlIGFyYmVpZHNwbGFzc2VyIGkgcmVnaW9uZW4uCgpJIGhlbHNlc2VrdG9yZW4gZXIgU3RhdmFuZ2VyIHVuaXZlcnNpdGV0c3N5a2VodXMgKFN1Uykgc2VudHJhbHQuCgojIyBTdW5uaG9yZGxhbmQKClZpZGVyZSDDuG5za2VyIHZpIMOlIHNlIHDDpSBkZW4gc2FtbWUgdXR2aWtsaW5nZW4sIG1lbiBkZW5uZSBnYW5nZW4gaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4uCgpgYGB7ciBBcmJlaWRzc3RlZF9TdW5uaG9yZGxhbmRfMX0Kc3VuX2FyYiAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDc6IFN1bm5ob3JkYWxhbmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUgaSAgXG4gYWxsZSBuw6ZyaW5nZXIiKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KGFuZ2xlPTApKSsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCkhlciB2aXNlciBmaWd1ciA3IHV0dmlrbGluZ2VuIHRpbCBkZW4gdG90YWxlIHN1bW1lbiBhdiBhbnNhdHRlIGkgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGZyYSAyMDA4IHRpbCAyMDIwLgpTdW5uaG9yZGFsYW5kIGhhciBpIDIwMjAgaSB1bmRlcmthbnQgYXYgMjUgNTAwIGFuc2F0dGUuClZpIHNlciB1dCBpZnLDpSBmaWd1cmVuIGF0IFN1bm5ob3JkbGFuZHNyZWdpb25lbiBoYWRkZSBlaW4gbWFya2FudCB2ZWtzdCBpZnLDpSAyMDA4IHRpbCAyMDE0IG1lZCBwZXJpb2RhciBtZWQgc3ZhayBuZWRnYW5nLgpGcmEgMjAxNCBoYXIgZGV0IHbDpnJ0IGVuIHJlZHVrc2pvbiBpIHRvdGFsdCBhbnRhbGwgYW5zYXR0ZS4KCmBgYHtyIEFyYmVpZHNzdGVkX1N1bm5ob3JkbGFuZF8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjExLCA0NjEyLCA0NjEzLCA0NjE0LCA0NjE1LCA0NjE2LCA0NjE3KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gODogU3VubmhvcmRsYW5kIiwgeCA9ICLDhXIiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKRmlndXIgOCB2aXNlciB1dHZpa2xpbmdlbiBhdiB0b3RhbHQgYW5zYXR0ZSBpIFN1bm5ob3JkbGFuZHNyZWdpb25lbiBww6Uga29tbXVuZW5pdsOlIGkgaGVsZSByZWdpb25lbiBmcmEgMjAwOCB0aWwgMjAyMC4KRGVubmUgZmlndXJlbiBnaXIgb3NzIGVuIG92ZXJzaWt0LCBtZW4gZXIgaWtrZSBoZWlsdCBicnVrZXJ2ZW5uZWxpZy4KVmkgbGFnZXIgZGVybWVkIGVuIG1lciBvdmVyc2lrdGxpZyBmaWd1ciwgamYuCmZpZ3VyIDkgJiAxMC4KCmBgYHtyIHN1bl9hcmJfbG9uZ30Kc3VuX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX1N1bm5ob3JkbGFuZF8zX1N0w7hyc3RlX0FyYmVpZHN0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIkt2aW5uaGVyYWQiLCAiU3RvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gOTogU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX1N1bm5ob3JkbGFuZF80X01pbnN0ZV9BcmJlaWRzdGVkfQpzdW5fYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiRml0amFyIiwgIlN2ZWlvIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxMDogU3VubmhvcmRsYW5kOiBFdG5lLCBGaXRoYXIsIFN2ZWlvIG9nIFR5c25lcyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMikpICsgCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKClZpIHNlciBoZXIgdXQgaWZyYSBmaWd1ciA5IG9nIDEwIHV0dmlrbGluZ2VuIGZvciBodmVyIGVua2VsdCBrb21tdW5lIGkgU3VubmhvcmRsYW5kIHRvdGFsdCBzZXR0LCBvZyBoZXIgc2VyIHZpIG15ZSB0eWRsaWdlcmUgdXR2aWtsaW5nZW4gZnJhIDIwMDggdGlsIDIwMjAuCkVuIGthbiBzZSBoZXIgYXQgS3Zpbm5oZXJhZCwgRXRuZSBvZyBGaXRqYXIgaGFyIGhhdHQgZW4gcmVkdWtzam9uIGkgdG90YWx0IGFuc2F0dGUsIG1lbnMgVHlzbmVzIG9nIFN2ZWlvIGhhciBoYXR0IGVpbiBrcmFmdGlnIHZla3N0LgpFbiBpbnRlcmVzc2FudCBiZW1lcmtpbmcgZXIgU3RvcmQgaSAyMDE0IG9nIEt2aW5uaGVyYWQgZnJhIDIwMDggdGlsIDIwMTcuCgpGb3Igw6UgZsOlIGV0IGJlZHJlIG92ZXJzaWt0IG92ZXIgdXR2aWtsaW5nZW4gaSBrb21tdW5lbiDDuG5za2VyIHZpIMOlIHNlIHDDpSBkZSA2IG1lc3QgcmVsZXZhbnRlIG7DpnJpbmdlbmUgaSBodmVyIGtvbW11bmUuCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQXJiZWlkc3N0ZWR9CnN1bl9hcmJfbG9uZyAlPiUgCiAgZmlsdGVyKGtuYXZuICVpbiUgYygiQsO4bWxvIiwgIlN0b3JkIiwgIkt2aW5uaGVyYWQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxMTogU3VubmhvcmRsYW5kOiBCw7htbG8sIEt2aW5uaGVyYWQgb2cgU3RvcmQiLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKSArIAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzRfTWluc3RlX0FyYmVpZHNzdGVkfQpzdW5fYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiU3ZlaW8iLCAiRml0amFyIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIDEyOiBTdW5uaG9yZGxhbmQ6IEV0bmUsIEZpdGphciwgU3ZlaW8gb2cgVHlzbmVzIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCkZpZ3VyIDExIG9nIDEyIHZpc2VyIGRlIDYgbWVzdCByZWxldmFudGUgbsOmcmluZ2VuZSBpIGh2ZXIgZW5rZWx0IGtvbW11bmUgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZnJhIDIwMDggdGlsIDIwMjAuCgpFbiBzZXIgdXQgaWZyYSBmaWd1ciAxMSBhdCBpIGRlIHRyZSBzdMO4cnN0ZSBrb21tdW5lbmUsICpCw7htbG8qLCAqS3Zpbm5oZXJhZCogb2cgKlN0b3JkKiBzw6UgaGFyIGRlIGFsbGUgaGF0dCBlbiByZWR1a3Nqb24gaSBpbmR1c3RyaWVuLCBzYW10aWRpZyBzb20gZGUgaGFyIGhhdHQgZW4gdmVrc3QgaSBoZWxzZS0gb2cgc29zaWFsdGplbmVzdGVyLgpUeXNuZXMgaGFyIHbDpnJ0IHN0YWJpbCBuw6VyIGRldCBrb21tZXIgdGlsIGluZHVzdHJpLCBtZW4gaGFyIHNldHQgZWluIG1hcmthbnQgdmVrc3QgaSBwcmltw6ZybsOmcmluZ2VuIChKb3JkYnJ1aywgU2tvZ2JydWsgb2cgRmlza2UpLgoKIyMjIFN5c3NlbHNldHRpbmdzdXR2aWtsaW5nZW4gZm9yIHVsaWtlIG7DpnJpbmdlciBpIHVsaWtlIGtvbW11bmVyIG9nIGZvciByZWdpb25lbiBzYW1sZXQuCgpEZXQgZsO4cnN0ZSBiZW1lcmtlbHNlc3ZlcmRpZ2UgaSBTdW5uaG9yZGxhbmRzcmVnaW9uZW4gZXIgZGVuIG1hcmthbnRlIHJlZHVrc2pvbmVuIGkgaW5kdXN0cmkgaSBTdG9yZCBrb21tdW5lIGkgMjAxNCwgc2FtdCBLdmlubmhlcmFkIGZyYSAyMDA4LgpEZXR0ZSBzdGVtbWVyIG92ZXJlbnMgbWVkIHRvIGhlbmRlbHNlci4KRGVuIGbDuHJzdGUgZXIgb2xqZWtuZWtrZW4gaSAyMDE0IHNvbSBtZWRmw7hydGUgYXQgYmwuYS4KQWtlciBTdG9yZCBBUyBzb20gZXIgYXZoZW5naWcgYXYgT2xqZS1pbmR1c3RyaWVuIG3DpXR0ZSBwZXJtaXRlcmUuCgpTdG9yZCBlciBlbiBrb21tdW5lIHNvbSBoYXIgbXllIG9mZnNob3JlIGluZHVzdHJpLgpJIDIwMDgvMjAwOSBzw6Ugc3Rlbmd0ZSBTw7hyLU5vcmdlIEFsdW1pbml1bSAiQi1IYWxsZW4iIHNvbSBtZWRmw7hydGUgNTAlIHJlZHVrc2pvbiBpIHByb2R1a3Nqb24sIG9nIGRlcm1lZCBhbnNhdHRlLgpJbnRlcmVzc2FudCDDpSBiZW1lcmtlIGF0IGkgS3Zpbm5oZXJhZCBzw6UgZXIgYW50YWxsIGluZHVzdHJpYXJiZWlkZXJlIHJlZHVzZXJ0IHNhbXRpZGlnIHNvbSBhbnRhbGwgYW5zYXR0ZSBpIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyIMO4a3QuCkLDuG1sbyBoYXIgb2dzw6Ugc2V0dCBlbiBzdGFiaWwgcmVkdWtzam9uIGkgYW5zYXR0ZSBpbm5lbiBpbmR1c3RyaSwgc2FtdCB2ZWtzdCBpIEhlbHNlLSBvZyBTb3NpYWxldGplbmVzdGVyIGZyZW0gdGlsIDIwMTguCgpTZXIgZW4gcMOlIGhlbGUgU3VubmhvcmRsYW5kc3JlZ2lvbmVuIGkgc2luIGhlbGhldCwgc8OlIHNlciB2aSBlbiBzdsOmcnQgdHlkZWxpZyB2ZWtzdCBpbm5lbiBIZWxzZS0gb2cgU29zaWFsZXRqZW5lc3Rlciwgb2cgcmVkdWtzam9uIGlubmVuIGluZHVzdHJpIGkgaGVsZSByZWdpb25lbi4KS3Zpbm5oZXJhZCwgVHlzbmVzIG9nIEZpdGphciBoYXIgb3BwbGV2ZCBlaW4gbWFya2FudCB2ZWtzdCBpbm5lbiBwcmltw6ZybsOmcmluZy4KKipLYW4gZGV0IHZlcmUgZWluIGdydW5uIHRpbCBkZXR0ZSBzb20gYnVyZGUgZGlza3V0ZXJhc3Q/PyoqCgojIEZvcnRzZXR0IEhlciAoT0EsIEtIKQoKIyMgSGFyZGFuZ2VyCgpUaWwgc2x1dHQgbcOlIHZpIGdqZXJlIGRldCBzYW1tZSBtZWQgKkhhcmRhbmdlcioKCkkgaGVuaG9sZCB0aWwgb3BwZ2F2ZW5zIGtyYXYgdGlsIGJldHJha3RlciB2aSAqSGFyZGFuZ2VyKiBmw7hyIDIwMTkgc29tIFVsbGVuc3ZhbmctIG9nIE9kZGEga29tbXVuZSBzb20gdG8gc2VwYXJlcnRlIGtvbW11bmVyLgppIDIwMjAgc8OlIGJsZSBVbGxlbnN2YW5nLCBPZGRhIG9nIEpvbmRhbCBzbMOldHQgc2FtbWVuIHRpbCBVbGxlbnN2YW5nLgpEZXR0ZSBmb3JrbGFyZXIgZGVuIHZvbGRzb21tZSDDuGtuaW5nZW4gaSBzeXNzZWxzZXR0aW5nIGkgcmVnaW9uZW4gdmVkIHRpZHNwdW5rdGV0IGZvciBrb21tdW5lc2FtbWVuc2zDpWluZy4KCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8xfQpoYXJfYXJiICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gw4VyLCB5ID0gVG90YWx0KSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkZpZy4gMTM6IEhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDIpKQpgYGAKCmBgYHtyIEFyYmVpZHNzdGVkX0hhcmRhbmdlcl8yfQpzeXNzZWxfYXJiICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYyg0NjE4LCAxMjI4KSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhYXIsIHkgPSBgQWxsZSBOw6ZyaW5nZXJgKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGtuYXZuLCBjb2xvdXIgPSBrbmF2bikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoJyMxMTExMTEnLCcjMDU0OTg3JykpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKHNlcSgyLjAsIDIsIGJ5ID0gLTAuMSkpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkgKwogICBsYWJzKHRpdGxlID0gIkZpZy4gMTQ6IEhhcmRhbmdlciIsIHggPSAiw4VyIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhhcl9hcmJfbG9uZ30KaGFyX2FyYl9sb25nIDwtIHN5c3NlbF9hcmIgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhcmRhbmdlcl9BcmJlaWRzdGVkfQpoYXJfYXJiX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIk9kZGEiLCAiVWxsZW5zdmFuZyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNTogSGFyZGFuZ2VyOiBPZGRhIG9nIFVsbGVuc3ZhbmciLCB4ID0gIsOFciIsIHkgPSAiQW50YWxsIGFuc2F0dGUiKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBOw6ZyaW5nLCBjb2xvdXIgPSBOw6ZyaW5nKSkgKwogIGZhY2V0X3dyYXAoZmFjZXRzID0gfiBrbmF2biwgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAyKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3IgTsOmcmluZ3Nmb3JkZWxpbmdfb2dfVXR2aWtsaW5nX0hhcmRhbmdlcl9BcmJlaWRzc3RlZH0KaGFyX2FyYl9sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiAxNjogSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCiMgMyBTeXNzZWxzZXR0aW5nIEkgVWxpa2UgTsOmcmluZ2VyLCBFdHRlciBCb3N0ZWQgKE1vZGVsbGVyIFVuZGVyIEFyYmVpZCkKCiMjIEhhdWdhbGFuZGV0CgpgYGB7ciBCb3N0ZWRfSGF1Z2FsYW5kZXRfMX0KaGxkX2JvcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJIYXVnYWxhbmRldCIpKwogIHlsYWIoIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCmBgYHtyIEJvc3RlZF9IYXVnYWxhbmRldF8yfQpzeXNzZWxfYm9zICU+JSAKICBmaWx0ZXIoa25yICVpbiUgYygxMTA2LCAxMTM1LCAxMTQ1LCAxMTQ2LCAxMTQ5LCAxMTUxLCAxMTYwKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBgQWxsZSBOw6ZyaW5nZXJgLCAoYW5nbGU9MCkpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgbGFicyh0aXRsZSA9ICJIYXVnYWxhbmRldCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSBpICBcbiBhbGxlIG7DpnJpbmdlciIpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoYW5nbGU9MCkpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIGhsZF9ib3NfbG9uZ30KaGxkX2Jvc19sb25nIDwtIHN5c3NlbF9ib3MgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyA9IGBBbGxlIE7DpnJpbmdlcmA6VW9wcGdpdHQsCiAgICBuYW1lc190byA9ICJOw6ZyaW5nIiwKICAgIHZhbHVlc190byA9ICJBbnNhdHRlIikKYGBgCgpgYGB7ciBOw6ZyaW5nX1RvdGFsX0hhdWdhbGFuZGV0XzNfU3TDuHJzdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkhhdWdlc3VuZCIsICJLYXJtw7h5IiwgIlZpbmRhZmpvcmQiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4geDogSGF1Z2FsYW5kZXQ6IEhhdWdlc3VuZCwgS2FybcO4eSBvZyBWaW5kYWZqb3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfSGF1Z2FsYW5kZXRfNF9NaW5zdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4geDogSGF1Z2FsYW5kZXQ6IEJva24sIFNhdWRhIFR5c3bDpnIgb2cgVXRzaXJhIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19IYXVnZWxhbmRldF8zX1N0w7hyc3RlX0Jvc3RlZH0KaGxkX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJIYXVnZXN1bmQiLCAiS2FybcO4eSIsICJWaW5kYWZqb3JkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhdWdhbGFuZGV0OiBIYXVnZXN1bmQsIEthcm3DuHkgb2cgVmluZGFmam9yZCIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDMpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGF1Z2VsYW5kZXRfNF9NaW5zdGVfQm9zdGVkfQpobGRfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkJva24iLCAiU2F1ZGEiLCAiVHlzdsOmciIsICJVdHNpcmEiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGF1Z2FsYW5kZXQ6IEJva24sIFNhdWRhLCBUeXN2w6ZyIG9nIFV0c2lyYSIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgojIyBTdW5uaG9yZGxhbmQKCmBgYHtyIEJvc3RlZF9TdW5uaG9yZGxhbmRfMX0Kc3VuX2JvcyAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IMOFciwgeSA9IFRvdGFsdCkpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh0aXRsZSA9ICJTdW5uaG9yZGFsYW5kIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIGkgIFxuIGFsbGUgbsOmcmluZ2VyIikgKwogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSkrIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMjAwOCwgMjAyMCwgYnkgPSAxKSkKYGBgCgpgYGB7ciBCb3N0ZWRfU3VubmhvcmRsYW5kXzJ9CnN5c3NlbF9ib3MgJT4lIAogIGZpbHRlcihrbnIgJWluJSBjKDQ2MTEsIDQ2MTIsIDQ2MTMsIDQ2MTQsIDQ2MTUsIDQ2MTYsIDQ2MTcpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFhciwgeSA9IGBBbGxlIE7DpnJpbmdlcmApKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBnZW9tX2xpbmUoYWVzKGdyb3VwID0ga25hdm4sIGNvbG91ciA9IGtuYXZuKSkgKwogIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IGMoc2VxKDIuMCwgMiwgYnkgPSAtMC4xKSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKSArCiAgIGxhYnModGl0bGUgPSAiU3VubmhvcmRsYW5kIiwgeCA9ICLDhXIiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ2JvdHRvbScpCmBgYAoKYGBge3Igc3VuX2Jvc19sb25nfQpzdW5fYm9zX2xvbmcgPC0gc3lzc2VsX2JvcyAlPiUKICBwaXZvdF9sb25nZXIoCiAgICBjb2xzID0gYEFsbGUgTsOmcmluZ2VyYDpVb3BwZ2l0dCwKICAgIG5hbWVzX3RvID0gIk7DpnJpbmciLAogICAgdmFsdWVzX3RvID0gIkFuc2F0dGUiKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQm9zdGVkfQpzdW5fYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkLDuG1sbyIsICJLdmlubmhlcmFkIiwgIlN0b3JkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lICJBbGxlIE7DpnJpbmdlciIpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSwgb3B0aW9uID0gIkEiKSArCiAgbGFicyh0aXRsZSA9ICJGaWcuIHg6IFN1bm5ob3JkbGFuZDogQsO4bWxvLCBLdmlubmhlcmFkIG9nIFN0b3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdfVG90YWxfU3VubmhvcmRsYW5kXzRfTWluc3RlX0Jvc3RlZH0Kc3VuX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJFdG5lIiwgIkZpdGphciIsICJTdmVpbyIsICJUeXNuZXMiKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgIkFsbGUgTsOmcmluZ2VyIikgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXMoZGlzY3JldGUgPSBUUlVFLCBvcHRpb24gPSAiQSIpICsKICBsYWJzKHRpdGxlID0gIkZpZy4geDogU3VubmhvcmRsYW5kOiBFdG5lLCBGaXRoYXIsIFN2ZWlvIG9nIFR5c25lcyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfU3VubmhvcmRsYW5kXzNfU3TDuHJzdGVfQm9zdGVkfQpzdW5fYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkLDuG1sbyIsICJTdG9yZCIsICJLdmlubmhlcmFkIikpICU+JSAKICBmaWx0ZXIoTsOmcmluZyAlaW4lIGMoIkluZHVzdHJpIiwgIkhlbHNlLSBvZyBTb3NpYWx0amVuZXN0ZXIiLCAiRmluYW5zaWVyaW5nIG9nIEZvcnNpa3JpbmciLCAiRWxla3RyaXNpdGV0LCBWYW5uIG9nIFJlbm92YXNqb24iLCAiQnlnZ2UtIG9nIEFubGVnZ3N2aXJrc29taGV0IiwgIkpvcmRicnVrLCBTa29nYnJ1ZyBvZyBGaXNrZSIpKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlN1bm5ob3JkbGFuZDogQsO4bWxvLCBLdmlubmhlcmFkIG9nIFN0b3JkIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCmBgYHtyIE7DpnJpbmdzZm9yZGVsaW5nX29nX1V0dmlrbGluZ19TdW5uaG9yZGxhbmRfNF9NaW5zdGVfQm9zdGVkfQpzdW5fYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIkV0bmUiLCAiU3ZlaW8iLCAiRml0amFyIiwgIlR5c25lcyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSBjKCJJbmR1c3RyaSIsICJIZWxzZS0gb2cgU29zaWFsdGplbmVzdGVyIiwgIkZpbmFuc2llcmluZyBvZyBGb3JzaWtyaW5nIiwgIkVsZWt0cmlzaXRldCwgVmFubiBvZyBSZW5vdmFzam9uIiwgIkJ5Z2dlLSBvZyBBbmxlZ2dzdmlya3NvbWhldCIsICJKb3JkYnJ1aywgU2tvZ2JydWcgb2cgRmlza2UiKSkgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBhcy5EYXRlKHBhc3RlMChhYXIsICItMDEtMDEiKSksIHkgPSBBbnNhdHRlKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTdW5uaG9yZGxhbmQ6IEV0bmUsIEZpdGphciwgU3ZlaW8gb2cgVHlzbmVzIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCiMjIEhhcmRhbmdlcgoKYGBge3IgQm9zdGVkX0hhcmRhbmdlcl8xfQpoYXJfYm9zICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gw4VyLCB5ID0gVG90YWx0KSkgKwogIGdlb21fbGluZSgpICsKICBsYWJzKHRpdGxlID0gIkhhcmRhbmdlciIsIHk9ICJBbGxlIE7DpnJpbmdlciIpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyMDA4LCAyMDIwLCBieSA9IDEpKQpgYGAKCmBgYHtyIEJvc3RlZF9IYXJkYW5nZXJfMn0Kc3lzc2VsX2JvcyAlPiUgCiAgZmlsdGVyKGtuciAlaW4lIGMoNDYxOCwgMTIyOCkpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYWFyLCB5ID0gYEFsbGUgTsOmcmluZ2VyYCkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBrbmF2biwgY29sb3VyID0ga25hdm4pKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCcjMTExMTExJywnIzA1NDk4NycpKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhzZXEoMi4wLCAyLCBieSA9IC0wLjEpKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDApICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDIwMDgsIDIwMjAsIGJ5ID0gMSkpICsKICAgbGFicyh0aXRsZSA9ICJIYXJkYW5nZXIiLCB4ID0gIsOFciIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBoYXJfYm9zX2xvbmd9Cmhhcl9ib3NfbG9uZyA8LSBzeXNzZWxfYm9zICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBgQWxsZSBOw6ZyaW5nZXJgOlVvcHBnaXR0LAogICAgbmFtZXNfdG8gPSAiTsOmcmluZyIsCiAgICB2YWx1ZXNfdG8gPSAiQW5zYXR0ZSIpCmBgYAoKYGBge3IgTsOmcmluZ19Ub3RhbF9IYXJkYW5nZXJfQm9zdGVkfQpoYXJfYm9zX2xvbmcgJT4lIAogIGZpbHRlcihrbmF2biAlaW4lIGMoIk9kZGEiLCAiVWxsZW5zdmFuZyIpKSAlPiUgCiAgZmlsdGVyKE7DpnJpbmcgJWluJSAiQWxsZSBOw6ZyaW5nZXIiKSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGFzLkRhdGUocGFzdGUwKGFhciwgIi0wMS0wMSIpKSwgeSA9IEFuc2F0dGUpKSArCiAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJBIikgKwogIGxhYnModGl0bGUgPSAiRmlnLiB4OiBIYXJkYW5nZXI6IE9kZGEgb2cgVWxsZW5zdmFuZyIsIHggPSAiw4VyIiwgeSA9ICJBbnRhbGwgYW5zYXR0ZSIpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyhncm91cCA9IE7DpnJpbmcsIGNvbG91ciA9IE7DpnJpbmcpKSArCiAgZmFjZXRfd3JhcChmYWNldHMgPSB+IGtuYXZuLCBzY2FsZXMgPSAiZnJlZV95IiwgbmNvbCA9IDIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnYm90dG9tJykKYGBgCgpgYGB7ciBOw6ZyaW5nc2ZvcmRlbGluZ19vZ19VdHZpa2xpbmdfSGFyZGFuZ2VyX0Jvc3RlZH0KaGFyX2Jvc19sb25nICU+JSAKICBmaWx0ZXIoa25hdm4gJWluJSBjKCJPZGRhIiwgIlVsbGVuc3ZhbmciKSkgJT4lIAogIGZpbHRlcihOw6ZyaW5nICVpbiUgYygiSW5kdXN0cmkiLCAiSGVsc2UtIG9nIFNvc2lhbHRqZW5lc3RlciIsICJGaW5hbnNpZXJpbmcgb2cgRm9yc2lrcmluZyIsICJFbGVrdHJpc2l0ZXQsIFZhbm4gb2cgUmVub3Zhc2pvbiIsICJCeWdnZS0gb2cgQW5sZWdnc3Zpcmtzb21oZXQiLCAiSm9yZGJydWssIFNrb2dicnVnIG9nIEZpc2tlIikpICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4ID0gYXMuRGF0ZShwYXN0ZTAoYWFyLCAiLTAxLTAxIikpLCB5ID0gQW5zYXR0ZSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGFyZGFuZ2VyOiBPZGRhLCBVbGxlbnN2YW5nIiwgeCA9ICLDhXIiLCB5ID0gIkFudGFsbCBhbnNhdHRlIikgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKGdyb3VwID0gTsOmcmluZywgY29sb3VyID0gTsOmcmluZykpICsKICBmYWNldF93cmFwKGZhY2V0cyA9IH4ga25hdm4sIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKQpgYGAKCiMgT3BwZ2F2ZSA0CgpQZW5kbGluZyBlciBldCB2aWt0aWcgYmVncmVwIMOlIGJydWtlIG7DpXIgdmkgc25ha2tlciBvbSByZWdpb25hbCB1dHZpa2xpbmcuCkRlIHVsaWtlIGtvbW11bmVuZSBlbGxlciByZWdpb25lbmUga2FuIGhhIHVsaWtlIGJlaG92LgpEZSBhbGxlciBmbGVzdGUga29tbXVuZXIgaGFyIGZvciBsaXRlIGFyYmVpZHNwbGFzc2VyIGkgZm9yaG9sZCB0aWwgYW50YWxsIGFyYmVpZGVuZS4KRGV0IHZpbCBzaSBhdCBkZSBmbGVzdGUgcGxhc3NlciBlciBkZSBhdmhlbmdpZ2UgYXYgw6UgcGVuZGxlIHRpbCBhbmRyZSBwbGFzc2VyLgpEZXQga2FuIHbDpnJlIGFuZHJlIGtvbW11bmVyIGkgc2FtbWUgcmVnaW9uIGVsbGVyIGFuZHJlIHJlZ2lvbmVyLgpEZXQgZmlubmVzIG9nc8OlIGJlZ3JlcGV0IG5ldHRvIGlubnBlbmRsaW5nIHNvbSBiZXR5ciBhdCBub2VuIGtvbW11bmVyIGVsbGVyIHJlZ2lvbmVyIGhhciBmbGVyZSBhcmJlaWRzcGxhc3NlciB0aWxnamVuZ2VsaWdlIGVubiBkZSBoYXIgZm9sayB0aWwgw6Ugam9iYmUgZGVyIGlubmFkIGkga29tbXVuZW4uClZpIHNrYWwgc2UgcMOlIGlubnBlbmRsaW5nIG9nIHV0cGVuZGxpbmcgc29tIHZpbCBrdW5uZSBmb3J0ZWxsZSBvc3MgaSBodmlsa2VuIGdyYWQgZXQgc3RlZCBlciBpbnRlZ3JlcnQgaSBldCBzdMO4cnJlIGFyYmVpZHNtYXJrZWQgPGh0dHBzOi8vcmVnaW9uYWxhbmFseXNlLm5vL3JhcHBvcnQvMzAwNC8xLzQ+LgoKVmkgaGFyIGxhZ2V0IGVuIHRhYmVsbCBzb20gdGFyIGZvciBzZWcgcmVnaW9uZW4gSGF1Z2FsYW5kZXQuCkhlciBrYW4gdmkgc2tpbGxlIGRlIGZvcnNramVsbGlnZSBrb21tdW5lbmUgb2cgc2UgaHZvciBhbmRlbGVuIGF2IGlubnBlbmRsaW5nIG9nIHV0cGVuZGxpbmcgZXIgc3TDuHJzdCBlbGxlciBtaW5zdC4KClZpIGthbiBzZSBww6UgS2FybcO4eSBzb20gZXQgZWtzZW1wZWwgbsOlciBkZXQgZ2plbGRlciBpbm5wZW5kbGluZyBvZyB1dHBlbmRsaW5nLgpJIEthcm3DuHkga29tbXVuZSBlciBkZXQgMTE2Mzcgc3R5a2sgc29tIGpvYmJlciBpIGVnZW4ga29tbXVuZSwgbWVucyA1ODg4IHBlbmRsZXIgdGlsIGFuZHJlIGtvbW11bmVyIGkgcmVnaW9uZW4uCkhlcmF2IHBlbmRsZXIgNDkxNiBwZXJzb25lciB0aWwgSGF1Z2VzdW5kLCA5IHBlbmRsZXIgdGlsIFNhdWRhLCAzMSBwZW5kbGVyIHRpbCBCb2tuLCA3MTIgdGlsIFR5c3bDpnIsIDIxOCB0aWwgVmluZGFmam9yZCBvZyAyIHBlcnNvbmVyIHBlbmRsZXIgdGlsIFV0c2lyYS4KTsOlciBkZXQga29tbWVyIHRpbCBpbm5wZW5kbGluZyBrYW4gdmkgc2UgYXQgZGV0IHRpbCBzYW1tZW4gZXIgMzM4NCBzb20gcGVuZGxlciB0aWwgS2FybcO4eSBmcmEgSGF1Z2xhbmRzcmVnaW9uZW4uCkRlbiBzdMO4cnN0ZSBhbmRlbGVuIGZyYSBzYW1tZSByZWdpb24gc29tIHBlbmRsZXIgdGlsIEthcm3DuHkgZXIgSGF1Z2VzdW5kLgpWaSBrYW4gc2UgZnJhIHRhYmVsbGVuIGF0IGRldCBlciAyNTg2IHN0eWtrZXIgc29tIHBlbmRsZXIgZnJhIEhhdWdlc3VuZCB0aWwgS2FybcO4eS4KClDDpSBVdHNpcmEgc29tIGhhciBlbiBtaW5kcmUgYmVmb2xrbmluZyBzZXIgdmkgYXQgODUgam9iYmVyIGkgaGplbWtvbW11bmVuLCBtZW5zIDkgc3RrIHBlbmRsZXIgdGlsIGFuZHJlIGtvbW11bmUgaSByZWdpb25lbiwgaGVuaG9sZHN2aXMgdGlsIEhhdWdlc3VuZCwgVHlzdsOmciBvZyBLYXJtw7h5LgoKUMOlIEhhdWdhbGFuZGV0IGthbiB2aSBzZQoKYGBge3J9CiMgZm9yIGlra2Ugw6Ugw7hkZWxlZ2dlIGhnbF9QZW5kbGluZwp0bXAgPC0gaGdsX1BlbmRsaW5nCmBgYAoKCmBgYHtyfQpuZXdfbmFtZXMgPC0gdG1wICU+JSAKICAjIEJva29tbXVlbj8/PwogIHNlbGVjdCgtQm9rb21tdWVuKSAlPiUgCiAgbmFtZXMoKSAlPiUgCiAgc3RyX3N1YihzdGFydCA9IC00TCwgZW5kID0gLTFMKSAlPiUgCiAgcGFzdGUoImsiLCAuLCBzZXAgPSAiXyIpICU+JSAKICAjIHJldHRlciBza3JpdmVmZWlsCiAgYygiQm9rb21tdW5lIiwgLikgCgpuYW1lcyh0bXApIDwtIG5ld19uYW1lcwoKYGBgCgoKYGBge3IgUGVuZGxpbmcgcMOlIEhhdWdhbGFuZGV0fQp0bXAgJT4lIAogIGthYmxlKCkKYGBgCgpJIFN1bm5ob3JkYWxhbmQgc2VyIGRldCBzbGlrIHV0IHByIDIwMjAKCmBgYHtyfQp0bXAgPC0gc3VuX1BlbmRsaW5nCmBgYAoKCmBgYHtyfQpuZXdfbmFtZXMgPC0gdG1wICU+JSAKICAjIEJva29tbXVlbj8/PwogIHNlbGVjdCgtQm9rb21tdWVuKSAlPiUgCiAgbmFtZXMoKSAlPiUgCiAgc3RyX3N1YihzdGFydCA9IC00TCwgZW5kID0gLTFMKSAlPiUgCiAgcGFzdGUoImsiLCAuLCBzZXAgPSAiXyIpICU+JSAKICAjIHJldHRlciBza3JpdmVmZWlsCiAgYygiQm9rb21tdW5lIiwgLikgCgpuYW1lcyh0bXApIDwtIG5ld19uYW1lcwpgYGAKCgpgYGB7ciBQZW5kbGluZyBpIFN1bm5ob3JkbGFuZH0KdG1wICU+JSAKICBrYWJsZSgpCmBgYAoKLSAgIAoKYGBge3Igc2lzdGV9CiMgU2lzdGUKYGBgCgotICAgCg==